/**
 * Created with Intellij JDEA
 * Description:
 * User:
 * Date:2022-03-16
 * Time:16:26
 */
class Student {
    public String name;
    public int age;

    public final void fun() {
        System.out.println("111");
    }

}
class person extends Student {


    /*public void fun() {
        System.out.println("111");
    }*/
}

public class MyFinal {

        int i =20;
        final int j=50;
        public static void main(String[] args){
            MyFinal ft = new MyFinal();
            ft.i = 99;/*final类FinalTest的属性值 i是可以改变的，因为属性值i前面没final修饰*/
            //ft.j=49;//报错....因为j属性是final的不可以改变。
            System.out.println(ft.i);
        }

    // 1 被final变量如果未被初始化，编译时会报错
    // public final int a;
    // 1 静态final变量未被初始化，编译时就会报错
    // public static final int a;

    //2. 在定义时初始化
    public final int a = 1;

    public final int b;
    {   //2. 在初始化块中初始化,也是可以的
        b = 2;
    }
    // ======================================================
    // 3 非静态final变量不能在静态初始化块中初始化
    /*public final int c;
    static{
            c=3;
    } */

    //3 静态常量，在定义时初始化
    public static final int d = 3;
    //3 静态常量，在静态初始化块中初始化
    public static final int e;

    static {
        e = 4;
    }

    //3 静态变量不能在初始化块中初始化
    //public static final int  f;
    // {
    //      f=60;
    // }
    //========================================================

    //public final int g;
    //静态final变量不可以在构造器中初始化
    //public static final int h;
    //在构造器中初始化
    public void finalTest() {
        //g = 70;
        //静态final变量不可以在构造器中初始化
        // h=80;
        // 给final的变量第二次赋值时，编译会报错
        // a=99;
        // d=99;
    }
}
